import 'log_utils.dart';

///
/// @Description TODO
/// @Author liuer
/// @CreateTime 2023年11月28日 16:43
extension StringExtension on String {
  /// 空判断
  bool get tyIsEmpty {
    return length == 0 || this == '' || this == 'null';
  }

  /// 非空判断
  bool get tyIsNotEmpty {
    return length != 0 && this != '' && this != 'null';
  }

  /// 删除所有空格
  String get tyDeleteAllSpaces {
    return replaceAll(RegExp(r"\s+\b|\b\s"), "");
  }

  /// 转小数
  double? get tyToDouble {
    return double.tryParse(this);
  }

  /// 转整数
  int? get tyToInt {
    return int.tryParse(this);
  }

  ///是否为正确邮箱
  bool get isValidEmail {
    return RegExp(r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")
        .hasMatch(this);
  }

  ///判定是否为4位密码
  bool get isValidPwd {
    return (int.tryParse(this) != null) && length == 4;
  }

  /// 是否是邮箱
  bool get tyIsEmail {
    RegExp email = RegExp(r"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
    return email.hasMatch(this);
  }

  /// 是否为中国手机号
  bool get tyIsMobile {
    RegExp mobile = RegExp(
        r"^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$");
    return mobile.hasMatch(this);
  }

  /// 密码: 8-16个数字单词，至少其中两种:字母/数字/符号
  bool get tyIsPassword {
    RegExp password =
        RegExp(r"^(?![a-zA-Z]+$)(?!\d+$)(?![^\da-zA-Z\s]+$).{8,16}$");
    return password.hasMatch(this);
  }

  // // aes - cbc 指定key加密
  // String aesByKeyIv(String keySecret, String ivSecret) {
  //   if (keySecret.length != ivSecret.length) {
  //     Log.d("keySecret and ivSecret must have same length");
  //     return this;
  //   }
  //   if (keySecret.tyIsNotEmpty && ivSecret.tyIsNotEmpty) {
  //     final key = Encrypt.Key.fromUtf8(keySecret);
  //     final iv = Encrypt.IV.fromUtf8(ivSecret);
  //     final encryter = Encrypt.Encrypter(Encrypt.AES(key, mode: Encrypt.AESMode.cbc));
  //     try {
  //       return encryter.encrypt(this, iv: iv).base64;
  //     } catch (e) {
  //       return this;
  //     }
  //   }
  //   return this;
  // }
  //
  // // md5签名
  // String get md5 {
  //   return Crypto.md5.convert(utf8.encode(this)).toString();
  // }
  // // aes - cbc 默认key加密
  // String get aes {
  //   String secret = Api.secret.substring(0, 16);
  //   if (secret.tyIsNotEmpty) {
  //     final key = Encrypt.Key.fromUtf8(secret);
  //     final iv = Encrypt.IV.fromUtf8(secret);
  //     final encryter = Encrypt.Encrypter(Encrypt.AES(key, mode: Encrypt.AESMode.cbc));
  //     try {
  //       return encryter.encrypt(this, iv: iv).base64;
  //     } catch (e) {
  //       return this;
  //     }
  //   }
  //   return this;
  // }
  // // aes - cbc 默认key解密
  // String get aesDecrypt {
  //   String secret = Api.secret.substring(0, 16);
  //   if (secret.tyIsNotEmpty) {
  //     final key = Encrypt.Key.fromUtf8(secret);
  //     final iv = Encrypt.IV.fromUtf8(secret);
  //     final encryter = Encrypt.Encrypter(Encrypt.AES(key, mode: Encrypt.AESMode.cbc));
  //     try {
  //       return encryter.decrypt64(this, iv: iv);
  //     } catch (e) {
  //       return this;
  //     }
  //   }
  //   return this;
  // }
}
